import {hashHistory} from "react-router";
import {message} from 'antd'
import * as config from './Config';
import "es6-promise";
import ajax from "@fdaciuk/ajax";
const {target,adminName} = config;
const Tool = {};


/*
 * ajax接口
 * */
Tool.fAjax = function (mySetting) {
    var setting = {
        url: window.location.pathname,
        method:"GET",
        headers:{
            "Content-Type": "application/x-www-form-urlencoded"
        },
        body:"",
        dataType:"json",
        mode:"basic",//basic:正常请求   cors   no-cors跨域请求     opaque 非cors下的跨域请求，无法判断是否成功和获取数据
        success: function (text) { }, //请求成功执行方法
        error: function () { } //请求失败执行方法
    }
    for (var attr in mySetting) {
        setting[attr] = mySetting[attr];
    }

    /*
     * 分为访问接口POST,GET，
     * 返回类型text()字符串,json()json对象,fromDate()对象,blob对象，arrayBuffer()二进制数组
     * */
    /*var header = {
     'Accept': 'application/json','content-type': 'application/json',
     "X-Authorization":Tool.localItem("User")?("Bearer "+JSON.parse(Tool.localItem("User")).token):""
     }*/
    if(mySetting.isToken){
        setting.headers["X-Authorization"] = Tool.localItem("User")?("Bearer "+JSON.parse(Tool.localItem("User")).token):"";
    }
    var result = ajax({
        method: setting.method,
        url: setting.url,
        data:setting.body,
        headers:setting.headers
    })
    result.then(function (res,xhr) {
        return setting.success(res);
    }).catch((error,xhr) => {
        if(xhr.status==401 || xhr.status==403){
            Tool.removeLocalItem('User');
            message.warning("token过期，请重新登录");
            hashHistory.push("/login");
            return ;
        }
        return setting.error('数据出错了');
    });
}


/**
 * 封装ajax post请求
 * @param {string} pathname 服务器请求地址
 * @param {string} body     发送给服务器的数据
 * @param {object} headers     发送给服务器的数据
 * @param {string} dataType  请求成功执行方法
 * @param {string} mode    请求失败执行方法
 * @param {function} success  请求成功执行方法
 * @param {function} error    请求失败执行方法
 */
Tool.fetchPost = function (pathname, body,headers,dataType, mode,success,error,isToken) {
    if(typeof headers === "object" && !(headers instanceof Array)){
        var hasProp = false;
        for (var prop in headers){
            hasProp = true;
            break;
        }
        if (!hasProp){
            headers = {
                'Accept': 'application/json','content-type': 'application/json'
            };
        }
    }
    var setting = {
        url: target + pathname,
        method:"POST",
        headers:headers,
        body:body,
        dataType:dataType,
        mode:mode,
        success: success || function () { }, //请求成功执行方法
        error: error || function () { }, //请求失败执行方法
        isToken:isToken==1?false:true
    };
    return Tool.fAjax(setting);
};

/**
 * 封装ajax put请求
 * @param {string} method 服务器请求地址
 * @param {string} pathname 服务器请求地址
 * @param {string} body     发送给服务器的数据
 * @param {object} headers     发送给服务器的数据
 * @param {string} dataType  请求成功执行方法
 * @param {string} mode    请求失败执行方法
 * @param {function} success  请求成功执行方法
 * @param {function} error    请求失败执行方法
 */
Tool.fetchCommon = function (method,pathname,body,headers,dataType, mode,success,error,isToken) {
    if(typeof headers === "object" && !(headers instanceof Array)){
        var hasProp = false;
        for (var prop in headers){
            hasProp = true;
            break;
        }
        if (!hasProp){
            headers = {
                'Accept': 'application/json','content-type': 'application/json'
            };
        }
    }
    var setting = {
        url: target + pathname,
        method:method,
        headers:headers,
        body:body,
        dataType:dataType,
        mode:mode,
        success: success || function () { }, //请求成功执行方法
        error: error || function () { }, //请求失败执行方法
        isToken:isToken==1?false:true
    };
    return Tool.fAjax(setting);
};

/**
 * 封装ajax get请求
 * @param {string} pathname 服务器请求地址
 * @param {string} body     发送给服务器的数据
 * @param {object} headers     发送给服务器的数据
 * @param {string} dataType  请求成功执行方法
 * @param {string} mode    请求失败执行方法
 * @param {function} success  请求成功执行方法
 * @param {function} error    请求失败执行方法
 */
Tool.fetchGet = function (pathname, body,headers,dataType, mode,success,error,isToken) {
    if(typeof headers === "object" && !(headers instanceof Array)){
        var hasProp = false;
        for (var prop in headers){
            hasProp = true;
            break;
        }
        if (!hasProp){
            headers = {
                'Accept': 'application/json',"Content-Type" : "text/plain"
            };
        }
    }
    var url=target + pathname;
    if(pathname.indexOf("http://")>-1){
        url = pathname;
    }
    var setting = {
        url: url,
        method:"GET",
        headers:headers,
        body:body,
        dataType:dataType,
        mode:mode,
        success: success || function () { }, //请求成功执行方法
        error: error || function () { }, //请求失败执行方法
        isToken:isToken==1?false:true
    };
    return Tool.fAjax(setting);
};

// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
Date.prototype.format = function(fmt) {
    var o = {
        "M+" : this.getMonth()+1, //月份
        "d+" : this.getDate(), //日
        "h+" : this.getHours(), //小时
        "m+" : this.getMinutes(), //分
        "s+" : this.getSeconds(), //秒
        "q+" : Math.floor((this.getMonth()+3)/3), //季度
        "S" : this.getMilliseconds() //毫秒
    };
    if(/(y+)/.test(fmt)) {
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
    for(var k in o) {
        if(new RegExp("("+ k +")").test(fmt)){
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        }
    }
    return fmt;
}

/**
 * 格式化时间
 *
 * @param {any} t
 * @returns
 */
Tool.formatDate = function (str) {
    var date = new Date(str);
    var time = new Date().getTime() - date.getTime(); //现在的时间-传入的时间 = 相差的时间（单位 = 毫秒）
    if (time < 0) {
        return '';
    } else if (time / 1000 < 60) {
        return '刚刚';
    } else if ((time / 60000) < 60) {
        return parseInt((time / 60000)) + '分钟前';
    } else if ((time / 3600000) < 24) {
        return parseInt(time / 3600000) + '小时前';
    } else if ((time / 86400000) < 31) {
        return parseInt(time / 86400000) + '天前';
    } else if ((time / 2592000000) < 12) {
        return parseInt(time / 2592000000) + '月前';
    } else {
        return parseInt(time / 31536000000) + '年前';
    }
}

Tool.formatDateTime = function(str,type){
    if(type==1){
        return new Date(str*1000).format("yyyy-MM-dd hh:mm:ss");
    }else{
        return new Date(str*1000).format("yyyy-MM-dd");
    }
}

/**
 * 本地数据存储或读取
 *
 * @param {any} key
 * @param {any} value
 * @param company string 公司名称
 * @param fieldList string 选择的领域
 * @param user  用户信息
 * @param typeFlag  登录true false
 * @returns
 */
Tool.localItem = function (key, value) {
    if (arguments.length == 1) {
        return localStorage.getItem(key);
    } else {
        return localStorage.setItem(key, value);
    }
}


/**
 * 删除本地数据
 *
 * @param {any} key
 * @returns
 */
Tool.removeLocalItem = function (key) {
    if (key) {
        return localStorage.removeItem(key);
    }
    return localStorage.removeItem();
}

/*
 * 获取cookie
 * */
Tool.getCookie = function (cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return "";
}
/*
 * 存储cookie
 * */
Tool.setCookie = function (name,value) {
    var Days = 30;
    var d = new Date();
    d.setTime(d.getTime() + (Days*24*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = name + "=" + value + "; " + expires+";path=/;";
}
/*
 * 删除cookie xinghan.scientistin.com
 * */
Tool.delCookie = function (name) {
    document.cookie = name + "=;expires=" + (new Date(0)).toGMTString()+";path=/;";
    //Tool.setCookie("tk","");
}
Tool.setSession = function(key,data){
    try {
        sessionStorage.setItem(key,JSON.stringify(data))
    }catch(err){
        sessionStorage.setItem(key,data)
    }
}

Tool.getSession = function(key){
    let value=null;
    try {
        value=JSON.parse(sessionStorage.getItem(key))
    }catch(err){
        value=sessionStorage.getItem(key)
    }
    return value;
}

Tool.delSession = function(key){
    if (Array.isArray(key)){
        for (var i=0,l=key.length;i<l;i++){
            sessionStorage.removeItem(key[i]);
        }
    }else {
        sessionStorage.removeItem(key);
    }
}

export { Tool , config }
